//package com.mi.rule.db.core;
//
//import com.baomidou.mybatisplus.core.conditions.Wrapper;
//
//import java.io.Serializable;
//import java.util.List;
//import java.util.Map;
//
///**
// * 一站式 DAO
// *
// * @author 王永吉
// * @date 2020-01-14
// * <p>
// * 参数
// * sqlString  : 完整的sql字符串
// * tableName  : 表名字符串
// * column     : 列字符串
// * values     : 值字符串
// * condition  : update 字符串条件
// * <p>
// * map        : Map类型的参数
// * entity     : 实现 MiEntity接口的实体类
// * listMap    : Map类型的参数数组
// * typeClass  : 查询返回数据类型
// * listEntity : Mybatis生成器生成的实体类数组且必须实现MiEntity
// * wrapper    : MybatisPlus特有的条件构造器
// * loopLength : 每次循环操作的长度
// */
//public interface MiDao {
//    /**
//     * 字符串插入操作
//     *
//     * @param sqlString 完整的SQL 例 : "insert into 0_demo (id,name) values (1,'小明') , (2,2) , (3,3)"
//     * @return 修改条数
//     */
//    long insert(String sqlString);
//
//    /**
//     * 字符串插入操作
//     *
//     * @param tableName 表名  例 : "0_demo"
//     * @param column    列    例 : "id,name"
//     * @param values    值    例 : "1,'小明'"
//     * @return 修改条数
//     */
//    long insert(String tableName, String column, String values);
//
//    /**
//     * 实体类插入
//     *
//     * @param entity 实现了MiEntity的实体类
//     * @return 修改条数
//     */
//    <P extends MiEntity> long insert(P entity);
//
//    /**
//     * 根据ID判断插入或者修改
//     *
//     * @param entity 实现了MiEntity的实体类
//     * @return 修改条数
//     */
//    <P extends MiEntity> long insertOrUpdate(P entity);
//
//    /**
//     * 批量插入
//     *
//     * @param listEntity 实现了MiEntity的实体类数组
//     * @return 修改条数
//     */
//    <P extends MiEntity> long insertBatch(List<P> listEntity);
//
//    /**
//     * 批量插入
//     *
//     * @param listEntity 实现了MiEntity的实体类数组 循环操作长度
//     * @param loopLength 循环操作长度
//     * @return 修改条数
//     */
//    <P extends MiEntity> long insertBatch(List<P> listEntity, int loopLength);
//
//    /**
//     * 批量 根据ID判断插入或者修改
//     *
//     * @param listEntity 实现了MiEntity的实体类数组
//     * @return 修改条数
//     */
//    <P extends MiEntity> long insertOrUpdateBatch(List<P> listEntity);
//
//    /**
//     * 批量 根据ID判断插入或者修改
//     *
//     * @param listEntity 实现了MiEntity的实体类数组
//     * @return 修改条数
//     */
//    <P extends MiEntity> long insertOrUpdateBatch(List<P> listEntity, int loopLength);
//
//    /**
//     * Map插入操作
//     *
//     * @param tableName 操作的表名
//     * @param map       插入的数据
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long insert(String tableName, M map);
//
//    /**
//     * Map插入操作
//     *
//     * @param tableName 操作的表名
//     * @param map       插入的数据
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long insertOrUpdate(String tableName, M map);
//
//    /**
//     * Map批量插入
//     *
//     * @param tableName 操作的表名
//     * @param listMap   插入的数据数组
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long insertBatch(String tableName, List<M> listMap);
//
//    /**
//     * Map批量插入
//     *
//     * @param tableName  操作的表名
//     * @param listMap    插入的数据数组
//     * @param loopLength 循环操作长度
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long insertBatch(String tableName, List<M> listMap, int loopLength);
//
//    /**
//     * Map根据ID判断批量插入或者修改
//     *
//     * @param tableName 操作的表名
//     * @param listMap   Map数组
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long insertOrUpdateBatch(String tableName, List<M> listMap);
//
//    /**
//     * Map根据ID判断批量插入或者修改
//     *
//     * @param tableName  操作的表名
//     * @param listMap    Map数组
//     * @param loopLength 循环操作长度
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long insertOrUpdateBatch(String tableName, List<M> listMap, int loopLength);
//
//    /**
//     * 删除操作
//     *
//     * @param sqlString 例 : "delete from 0_demo where id != 1"
//     * @return 修改条数
//     */
//    long delete(String sqlString);
//
//    /**
//     * 删除操作
//     *
//     * @param tableName 例 : "0_demo"
//     * @param condition 例 : "id != 1"
//     * @return 修改条数
//     */
//    long delete(String tableName, String condition);
//
//    /**
//     * 删除操作
//     *
//     * @param wrapper 条件构造器，操作的表名从构造其中获取
//     * @return 修改条数
//     */
//    <T> long delete(Wrapper<T> wrapper);
//
//    /**
//     * 删除操作
//     *
//     * @param tableName 操作的表名
//     * @param id        数据ID
//     * @return 修改条数
//     */
//    long deleteById(String tableName, Serializable id);
//
//    /**
//     * 删除操作
//     *
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long deleteByMap(String tableName, M map);
//
//    /**
//     * 删除操作
//     *
//     * @param tableName 操作的表名
//     * @param ids       数据ID集合
//     */
//    long deleteByIds(String tableName, List<Serializable> ids);
//
//    /**
//     * 删除操作
//     *
//     * @param entityClass 操作的实体类，用来读取表名
//     * @param id          数据ID
//     * @return 修改条数
//     */
//    <P extends MiEntity> long deleteById(Class<P> entityClass, Serializable id);
//
//    /**
//     * 删除操作
//     *
//     * @param entityClass 操作的实体类，用来读取表名
//     * @param ids         数据ID集合取
//     * @return 修改条数
//     */
//    <P extends MiEntity> long deleteByIds(Class<P> entityClass, List<Serializable> ids);
//
//    <P extends MiEntity, M extends Map<?, ?>> long deleteByMap(Class<P> entityClass, M map);
//
//    /**
//     * 修改操作
//     *
//     * @param sqlString 例 : "update 0_demo set name='略略略...' where id =33 "
//     * @return 修改条数
//     */
//    long update(String sqlString);
//
//    /**
//     * 修改操作
//     *
//     * @param tableName 例 : "0_demo"
//     * @param setString 例 : "name=20 , create_time='2019-02-02 00:00:00'"
//     * @param condition 例 : "id=30 and name!=30"
//     * @return 修改条数
//     */
//    long update(String tableName, String setString, String condition);
//
//    /**
//     * 根据条件构造器修改
//     *
//     * @param wrapper 条件构造区
//     * @return 修改条数
//     */
//    <T> long update(Wrapper<T> wrapper);
//
//    /**
//     * 根据条件构造器修改
//     *
//     * @param entity  实现了MiEntity的实体类
//     * @param wrapper 条件构造器
//     * @return 修改条数
//     */
//    <P extends MiEntity, T> long update(P entity, Wrapper<T> wrapper);
//
//    /**
//     * 根据ID修改
//     *
//     * @param entity 实现了MiEntity的实体类
//     * @return 修改条数
//     */
//    <P extends MiEntity> long updateById(P entity);
//
//    /**
//     * 根据IDS修改
//     *
//     * @param entity 实现了MiEntity的实体类
//     * @param ids    ID数组
//     * @return 修改条数
//     */
//    <P extends MiEntity> long updateByIds(P entity, List<Serializable> ids);
//
//    /**
//     * 根据实体类ID修改
//     *
//     * @param entityList 实现了MiEntity的实体类数组
//     * @return 修改条数
//     */
//    <P extends MiEntity> long updateBatchById(List<P> entityList);
//
//    /**
//     * 根据条件构造器修改
//     *
//     * @param map     修改的数据
//     * @param wrapper 条件构造器（需要具备表名）
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>, T> long update(M map, Wrapper<T> wrapper);
//
//    /**
//     * 根据ID修改
//     *
//     * @param tableName 修改表名
//     * @param map       修改数据
//     * @param id        条件
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long updateById(String tableName, M map, Serializable id);
//
//    /**
//     * 批量根据ID数组修改
//     *
//     * @param tableName 修改表名
//     * @param map       修改数据
//     * @param ids       条件
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long updateByIds(String tableName, M map, List<Serializable> ids);
//
//    /**
//     * 批量根据ID修改
//     *
//     * @param tableName 修改表名
//     * @param listMap   修改数据
//     * @return 修改条数
//     */
//    <M extends Map<?, ?>> long updateBatchById(String tableName, List<M> listMap);
//
//    /**
//     * 统计
//     * 注意：count(列) 列=null 的情况，无法统计
//     *
//     * @return 查询数量
//     */
//    <T> long count(Wrapper<T> wrapper);
//
//    /**
//     * 统计
//     * 注意：count(列) 列=null 的情况，无法统计
//     *
//     * @return 查询数量
//     */
//    <T> long count(String column, Wrapper<T> wrapper);
//
//    /**
//     * 统计
//     * 注意：count(列)  列=null 的情况，无法统计
//     *
//     * @param sqlString 完整的SQL 例 : "select count(1) from 0_demo where id > 10"
//     * @return 查询数量
//     */
//    long count(String sqlString);
//
//    /**
//     * 统计
//     * 注意：count(列) 列=null 的情况，无法统计
//     *
//     * @param tableName 表名 例: "0_demo"
//     * @param column    count 例: "id"
//     * @param condition 条件 例: "id>10"
//     * @return 查询数量
//     */
//    long count(String tableName, String column, String condition);
//
//    /**
//     * 查询并返回一条数据
//     *
//     * @param sqlString 完整的SQL 例 : "select * from 0_demo where id > 10"
//     */
//    <M extends Map<?, ?>> M selectOne(String sqlString);
//
//    /**
//     * 查询并返回一条数据
//     *
//     * @param sqlString 完整的SQL 例 : "select * from 0_demo where id > 10"
//     */
//    <F> F selectOne(String sqlString, Class<F> typeClass);
//
//    <T> T selectOne(Wrapper<T> wrapper);
//
//    <M extends Map<?, ?>> M selectById(String tableName, Object id);
//
//    <M extends Map<?, ?>> M selectById(String tableName, String column, Object id);
//
//    <F> F selectById(String tableName, Object id, Class<F> typeClass);
//
//    <F> F selectById(String tableName, String column, Object id, Class<F> typeClass);
//
//    <M extends Map<?, ?>> List<M> selectByIds(String tableName, List<Object> ids);
//
//    <M extends Map<?, ?>> List<M> selectByIds(String tableName, String column, List<Object> ids);
//
//    <F> List<F> selectByIds(String tableName, List<Object> ids, Class<F> typeClass);
//
//    <F> List<F> selectByIds(String tableName, String column, List<Object> ids, Class<F> typeClass);
//
//    <T> List<T> selectList(Wrapper<T> wrapper);
//
//    <F> List<F> selectList(Class<F> typeClass);
//
//    /**
//     * 查询并返回集合
//     *
//     * @param sqlString 完整的SQL 例 : "select * from 0_demo where id > 10"
//     */
//    <M extends Map<?, ?>> List<M> selectList(String sqlString);
//
//    /**
//     * 查询并返回集合
//     *
//     * @param sqlString 完整的SQL 例 : "select * from 0_demo where id > 10"
//     */
//    <F> List<F> selectList(String sqlString, Class<F> typeClass);
//
//    /**
//     * 查询分页
//     *
//     * @param sqlString 完整的SQL 例 : "select * from 0_demo where id > 10"
//     */
//    <M extends Map<?, ?>> MiPage<M> page(MiPage<M> page, String sqlString);
//
//    <T> MiPage<T> page(MiPage<T> page, Wrapper<T> wrapper);
//}
